home *** CD-ROM | disk | FTP | other *** search
/ Network Support Library / RoseWare - Network Support Library.iso / apidev / ipxdem.arc / IPXDEMOR.ASM next >
Assembly Source File  |  1986-09-01  |  4KB  |  118 lines

  1. ;        IPXDEMOR.ASM --- SOURCE TO IPXDEMOR.COM
  2. ;          (ALSO NEEDS IPXDEMOS.ASM --- IPXDEMOS.COM)
  3. ;
  4. ;    THIS PROGRAM IS A VERY SIMPLE DEMONSTRATION OF THE USE
  5. ;    OF THE NOVELL IPX ROUTINES.  IN THIS PROGRAM WE WILL DO
  6. ;    4 THINGS:
  7. ;
  8. ;        1: WE WILL OPEN AN IPX SOCKET
  9. ;
  10. ;        2: WE WILL SET UP AN IPX EVENT CONTROL BLOCK TO
  11. ;           RECEIVE ANYTHING THAT COMES IN ON OUR SOCKET
  12. ;
  13. ;        3: WE WILL LEAVE A PORTION OF OUR PROGRAM RESIDENT
  14. ;           WAITING FOR A PACKET TO BE SENT TO US
  15. ;
  16. ;        4: WHEN AND IF WE RECEIVE A PACKET ON OUR SOCKET
  17. ;           WE WILL REBOOT THE COMPUTER
  18. ;
  19. ;
  20. ;    IN SHORT, THIS PROGRAM WILL WAIT FOR SOMEONE ON THE NETWORK
  21. ;    TO SEND IN DATA ON OUR SOCKET, AND WHEN THAT HAPPENS OUR
  22. ;    COMPUTER WILL REBOOT.  IF THIS PROGRAM WERE LOADED ON EVERY
  23. ;    MACHINE IN THE NETWORK, AND THE MATHING PROGRAM THAT SENDS
  24. ;    THE PACKETS OUT WERE IN THE SUPERVISOR'S DIRECTORY, THEN ANY
  25. ;    TIME THE SUPERVISOR NEEDED TO HE COULD CAUSE EVERY COMPUTER
  26. ;    ON THE NET TO BE RESET.
  27. ;
  28. ;    THE USEFULLNESS OF THIS PROGRAM IS PROBABLY VERY LIMITED DUE
  29. ;    TO THE POSSIBILITY OF MAJOR LOSS OF DATA IF A RESET WERE TO
  30. ;    OCCUR AT A CRUCIAL TIME.  THIS PROGRAM IS MEANT ONLY AS AN
  31. ;    EXAMPLE OF IPX AND HOW EASY A SIMPLE APPLICATION IS TO
  32. ;    DEVELOP.
  33. ;
  34. ;                                CLAY JONES
  35. ;                          (DEVELOPER OF HOT PRINT)
  36.  
  37.  
  38. CSEG    SEGMENT    PARA PUBLIC 'code'
  39.     ORG    100h
  40.     ASSUME    CS:CSEG, DS:CSEG
  41.  
  42. ENTRY    PROC    NEAR        ; THE ENTRY POINT OF THE PROGRAM
  43.     JMP    GO        ; JUMP AROUND RESIDENT PORTION TO LOAD
  44.  
  45. RST_SOC    EQU    9997h        ; THIS IS THE IPX SOCKET WE'LL RESIDE AT
  46.  
  47.  
  48.     ;------ THIS IS AN IPX EVENT CONTROL BLOCK (ECB) IT IS USED
  49.     ;    TO SCHEDULE AN IPX EVENT.  WE WILL USE IT TO LISTEN
  50.     ;    FOR A PACKET TO BE SENT TO US AND CALL OUR 'RCVD'
  51.     ;    ROUTINE TO RESET THE COMPUTER
  52.  
  53. ECB1    DD    0        ; THESE 4 BYTES ARE USED BY IPX TO LINK
  54. ADDR1    DD    0        ; WE'LL PUT OUR RESET POINTER HERE
  55. INUSE1    DB    0        ; IN USE FLAGS IF WE WANTED TO CHECK STATUS
  56. COMPL1    DB    0        ; COMPLETION ERROR CODES GO IN HERE
  57. SOCKT1    DW    RST_SOC        ; THE SOCKET WE WILL BE LISTENING TO
  58. WK1    DB    16 DUP(0)    ; WORK SPACE FOR IPX
  59. IMADR1    DB    6 DUP (0)    ; THE ADDRESS OF THE STATION SENDING TO US
  60. FRG1    DW    1        ; THE NUMBER OF FRAGMENTS WE HAVE (1)
  61. AD1A    DD    0        ; THE ADDRESS OF THE 1 FRAGMENT WE HAVE
  62. SIZ1A    DB    36,0        ; THE SIZE OF OUR FRAGMENT
  63.  
  64.  
  65.     ;------ THIS IS THE HEADER OF THE IPX PACKET WE WILL RECEIVE
  66.  
  67. CHSUM1    DB    0,0        ; THIS IS A CHECKSUM OF THE HEADER PACKET
  68. LEN1    DB    0,0        ; THIS IS THE TOTAL LENGTH OF THE PACKET
  69. TC1    DB    0        ; "TRANSPORT CONTROL BYTE" USED BY IPX
  70. PT1    DB    0        ; "PACKET TYPE"
  71. DST1    DB    12 DUP(0)    ; WILL BE OUR OWN ADDRESS
  72. SRC1    DB    12 DUP(0)    ; ADDRESS OF SOURCE STATION SENDING
  73.  
  74. RCVBFR    DB    50 DUP(0)    ; A BLANK BUFFER IN CASE WE EVER NEED IT
  75.  
  76.  
  77.     ;------    THIS ROUTINE WILL BE CALLED BY IPX WHENEVER A PACKET IS
  78.     ;    RECEIVED ON OUR SOCKET.  IT WILL CAUSE THE COMPUTER TO
  79.     ;    EXECUTE A WARM BOOT.
  80.  
  81. RCVD    PROC    FAR
  82.     XOR    AX,AX        ; CLEAR THE AX REGISTER TO 0
  83.     MOV    DS,AX        ; AND SET THE DATA SEGMENT TO SEGMENT 0
  84.     MOV    BX,472h        ; TO WARM BOOT WE NEED TO PUT INTO 0:472
  85.     MOV    WORD PTR [BX],1234h    ; THE VALUE 1234h
  86.     MOV    AX,0FFFFh    ; NEXT WE SET AX TO SEGMENT FFFF
  87.     PUSH    AX        ;   AND PUSH IT ONTO THE STACK
  88.     PUSH    DS        ; NOW PUSH 0 ONTO THE STACK
  89.     RET            ; NEXT DO A FAR RETURN TO FFFF:0 TO REBOOT
  90. RCVD    ENDP
  91.  
  92.  
  93.     ;------ THIS PORTION OF THE PROGRAM
  94.     ;        1: OPENS THE SOCKET
  95.     ;        2: SET UP THE IPX ECB
  96.     ;        3: EXITS LEAVING THE ECB AND RCVD RESIDENT
  97.  
  98. GO:    MOV    BX,0        ; SET BX TO 0 MEAN OPEN SOCKET TO IPX
  99.     MOV    DX,RST_SOC    ; WE WANT TO OPEN A SPECIFIC SOCKET
  100.     MOV    AL,0FFh        ; WE WANT IT TO STAY OPEN PERMANENTLY
  101.     INT    7Ah        ; INT 7A CALLS IPX
  102.     PUSH    DS        ; IPX CHANGES THE ES REGISTER SO WE RESET IT
  103.     POP    ES        ;  .. TO EQUAL THE DS REGISTER
  104.     MOV    AX,DS        ; PUT DS INTO AX SO WE CAN SET UP THE ECB
  105.     MOV    WORD PTR AD1A+2,AX        ; PUT DS IN SEGMENT ADDRESS
  106.     MOV    WORD PTR AD1A,OFFSET CHSUM1    ; SET OFFSET OF SEGMENT
  107.     MOV    WORD PTR ADDR1+2,AX        ; PUT DS INTO EVENT SRVC RTN
  108.     MOV    WORD PTR ADDR1,OFFSET RCVD    ; PUT OFFSET OF SERVICE ROUTINE
  109.     LEA    SI,ECB1        ; PUT ADDRESS OF THE ECB INTO SI REGISTER
  110.     MOV    BX,4        ; BX = 4 MEANS LISTEN FOR PACKET
  111.     INT    7Ah        ; INT 7A CALLS IPX
  112.     MOV    DX,OFFSET GO    ; SET THE NUMBER OF BYTES TO LEAVE RESIDENT
  113.     INT    27h        ; TERMINATE BUT LEAVE PART OF PROGRAM RESIDENT
  114. ENTRY    ENDP
  115. CSEG    ENDS
  116.     END    ENTRY
  117.  
  118.